//: C23:Catchref.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// Why catch by reference?
#include <iostream>
using namespace std;

class Base
{
public:
    virtual void what() {
        cout << "Base" << endl;
    }
};

class Derived : public Base
{
public:
    void what() {
        cout << "Derived" << endl;
    }
};

void f()
{
    throw Derived();
}

int main()
{
    try {
        f();
    } catch (Base b) {
        b.what();
    }
    try {
        f();
    } catch (Base& b) {
        b.what();
    }
} ///:~
